package demo;


import java.util.Arrays;

class person {

}

//写一个泛型，其中有一个方法，求数组中的最大值

//泛型的上界
//擦除为一个实现了这个接口的类型，指定了边界，没有边界就是object
class Alg<T extends Comparable<T>> {
    public T findMax(T[] array) {
        T max = array[0];
        for(int i = 1;i<array.length;i++) {
            //引用类型不能通过大于和小于来比较
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}


//泛型的静态方法
class Alg2 {
    public static<T extends Comparable<T>> T findMax(T[] array) {
        T max = array[0];
        for(int i = 1;i<array.length;i++) {
            //引用类型不能通过大于和小于来比较
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}


public class Test2 {
    public static void main(String[] args) {
        //使用静态的泛型，这里不需要实例化对象
        Integer[] array = {1,4,2,6,8,23,66,99};

        //这里的<Integer>可以省略
        //System.out.println(Alg2.<Integer>findMax(array));
        //通过类名调用就可以
        System.out.println(Alg2.findMax(array));
    }

    public static void main1(String[] args) {
        //<>里面一定是一个引用类型
        Alg<Integer> alg = new Alg<>();
        Integer[] array = {1,4,2,6,8,23,66,99};

        //这里的<Integer>可以省略
        //System.out.println(alg.<Integer>findMax(array));
        System.out.println(alg.findMax(array));
    }
}
